package dto

import "time"

// ReceiveCouponReq 领取优惠券请求
type ReceiveCouponReq struct {
	UserId int64 `json:"user_id" binding:"required"`
	RuleId int64 `json:"rule_id" binding:"required"`
}

// UseCouponReq 使用优惠券请求
type UseCouponReq struct {
	UserId   int64 `json:"user_id" binding:"required"`
	CouponId int64 `json:"coupon_id" binding:"required"`
	OrderId  int64 `json:"order_id" binding:"required"`
	Amount   int64 `json:"amount" binding:"required"`
}

// UserCouponResp 用户优惠券响应
type UserCouponResp struct {
	Id          int64     `json:"id"`
	Name        string    `json:"name"`         // 优惠券名称
	Type        string    `json:"type"`         // 优惠券类型
	Value       int64     `json:"value"`        // 面值
	MinAmount   int64     `json:"min_amount"`   // 最低使用金额
	Status      int       `json:"status"`       // 状态
	ValidStart  time.Time `json:"valid_start"`  // 有效期开始
	ValidEnd    time.Time `json:"valid_end"`    // 有效期结束
	Description string    `json:"description"`  // 使用说明
	ProductType string    `json:"product_type"` // 适用商品类型
}

// ListUserCouponReq 查询用户优惠券请求
type ListUserCouponReq struct {
	UserId int64 `form:"user_id" binding:"required"`
	Status int   `form:"status"`
	Page   int   `form:"page" binding:"required,min=1"`
	Size   int   `form:"size" binding:"required,min=1,max=50"`
}

// ListUserCouponResp 用户优惠券列表响应
type ListUserCouponResp struct {
	Total int64             `json:"total"`
	List  []*UserCouponResp `json:"list"`
}

// CreateCouponRuleReq 创建优惠券规则请求
type CreateCouponRuleReq struct {
	Name        string `json:"name" binding:"required"`
	Type        string `json:"type" binding:"required"`
	Value       int64  `json:"value" binding:"required"`
	MinAmount   int64  `json:"min_amount"`
	ValidDays   int    `json:"valid_days" binding:"required"`
	DayLimit    int    `json:"day_limit"`
	TotalLimit  int    `json:"total_limit"`
	ProductType string `json:"product_type"`
	Description string `json:"description"`
}

// UpdateCouponRuleReq 更新优惠券规则请求
type UpdateCouponRuleReq struct {
	Id          int64  `json:"id" binding:"required"`
	Name        string `json:"name"`
	Value       int64  `json:"value"`
	MinAmount   int64  `json:"min_amount"`
	ValidDays   int    `json:"valid_days"`
	DayLimit    int    `json:"day_limit"`
	TotalLimit  int    `json:"total_limit"`
	ProductType string `json:"product_type"`
	Status      int    `json:"status"`
	Description string `json:"description"`
}

// ListCouponRuleReq 查询优惠券规则请求
type ListCouponRuleReq struct {
	Type        string `form:"type"`
	ProductType string `form:"product_type"`
	Status      int    `form:"status"`
	Page        int    `form:"page" binding:"required,min=1"`
	Size        int    `form:"size" binding:"required,min=1,max=50"`
}

// CouponRuleResp 优惠券规则响应
type CouponRuleResp struct {
	Id          int64  `json:"id"`
	Name        string `json:"name"`
	Type        string `json:"type"`
	Value       int64  `json:"value"`
	MinAmount   int64  `json:"min_amount"`
	ValidDays   int    `json:"valid_days"`
	DayLimit    int    `json:"day_limit"`
	TotalLimit  int    `json:"total_limit"`
	ProductType string `json:"product_type"`
	Status      int    `json:"status"`
	Description string `json:"description"`
}

// ListCouponRuleResp 优惠券规则列表响应
type ListCouponRuleResp struct {
	Total int64             `json:"total"`
	List  []*CouponRuleResp `json:"list"`
}

// CouponUserStatReq 用户优惠券统计请求
type CouponUserStatReq struct {
	UserId    int64  `form:"user_id" binding:"required"`
	StartTime string `form:"start_time"` // 开始时间
	EndTime   string `form:"end_time"`   // 结束时间
}

// CouponUserStatResp 用户优惠券统计响应
type CouponUserStatResp struct {
	TotalReceived int64 `json:"total_received"` // 总领取数量
	TotalUsed     int64 `json:"total_used"`     // 总使用数量
	TotalExpired  int64 `json:"total_expired"`  // 总过期数量
	Available     int64 `json:"available"`      // 可用数量
	TotalDiscount int64 `json:"total_discount"` // 总优惠金额(分)
}

// CouponRuleStatReq 优惠券规则统计请求
type CouponRuleStatReq struct {
	RuleId    int64  `form:"rule_id" binding:"required"`
	StartTime string `form:"start_time"`
	EndTime   string `form:"end_time"`
}

// CouponRuleStatResp 优惠券规则统计响应
type CouponRuleStatResp struct {
	TotalIssued   int64   `json:"total_issued"`   // 总发放数量
	TotalUsed     int64   `json:"total_used"`     // 总使用数量
	TotalExpired  int64   `json:"total_expired"`  // 总过期数量
	UseRate       float64 `json:"use_rate"`       // 使用率
	TotalDiscount int64   `json:"total_discount"` // 总优惠金额(分)
	AvgDiscount   float64 `json:"avg_discount"`   // 平均优惠金额(分)
}
